package com.xinzhidi.web.house.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.xinzhidi.common.core.page.TableDataInfo;
import com.xinzhidi.web.house.domain.Household;
import com.xinzhidi.web.house.domain.dto.HouseholdAddDto;
import com.xinzhidi.web.house.domain.dto.HouseholdListDto;
import com.xinzhidi.web.house.domain.dto.HouseholdUpdDto;
import com.xinzhidi.web.house.domain.vo.HouseholdImportVo;
import com.xinzhidi.web.house.domain.vo.HouseholdInfoVo;
import com.xinzhidi.web.house.domain.vo.HouseholdListVo;
import com.xinzhidi.web.plot.domain.vo.SelectVo;

import java.util.List;


/**
 * 住户Service接口
 *
 * @author cx
 * @date 2023-05-23
 */
public interface IHouseholdService extends IService<Household> {
    /**
     * 查询住户
     *
     * @param id 住户主键
     * @return 住户
     */
    HouseholdInfoVo selectHouseholdById(Long id);

    /**
     * 查询住户列表
     *
     * @param dto 住户
     * @return 住户集合
     */
    TableDataInfo<HouseholdListVo> selectHouseholdList(HouseholdListDto dto);

    TableDataInfo<SelectVo> listHouseholdSelect(HouseholdListDto dto);

    /**
     * 新增住户
     *
     * @param dto 住户
     * @return 结果
     */
    int insertHousehold(HouseholdAddDto dto);

    /**
     * 修改住户
     *
     * @param dto 住户
     * @return 结果
     */
    int updateHousehold(HouseholdUpdDto dto);

    /**
     * 批量删除住户
     *
     * @param ids 需要删除的住户主键集合
     * @return 结果
     */
    int deleteHouseholdByIds(Long[] ids);

    /**
     * 删除住户信息
     *
     * @param id 住户主键
     * @return 结果
     */
    int deleteHouseholdById(Long id);

    String importBuild(List<HouseholdImportVo> buildList, Boolean updateSupport);

    /**
     * 根据模型id集合及协议类型获取住户id集合
     *
     * @param modelIds 模型id集合
     * @param protocolType 协议类型
     * @return 结果
     */
    List<Long> getHouseholdIdsByModelIds(List<Integer> modelIds , String protocolType);

    /**
     * 更新数据(小区、楼栋、单元的供热面积和供热用户)
     * @param DataType 数据类型  0:小区  1:楼栋  2:单元
     * @param ids id集合
     */
    void updateData(String DataType , List<Long> ids);

    /**
     * 根据删除的住户id集合更新数据(小区、楼栋、单元的供热面积和供热用户)
     * @param ids 住户id集合
     */
    void updateDataByDeleteIds(List<Long> ids);

    /**
     * 设置下拉框
     */
    void setBox() throws Exception;
}
